package cn.iocoder.yudao.module.erp.dal.mysql.bom;

import java.util.*;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.erp.dal.dataobject.bom.ErpBomItemsDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * bom分录 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface ErpBomItemsMapper extends BaseMapperX<ErpBomItemsDO> {

    default PageResult<ErpBomItemsDO> selectPage(PageParam reqVO, Long fparentid) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ErpBomItemsDO>()
            .eq(ErpBomItemsDO::getFparentid, fparentid)
            .orderByAsc(ErpBomItemsDO::getFid));
    }

//    default int deleteByFparentid(Long fparentid) {
//        // 物理删除
//        return delete(new LambdaQueryWrapperX<ErpBomItemsDO>().eq(ErpBomItemsDO::getFparentid, fparentid));
//
////        return delete(ErpBomItemsDO::getFparentid, fparentid);
//    }

    /**
     * 根据父 ID 进行删除操作，支持物理删除或逻辑删除
     * @param fparentid 父 ID
     * @param isPhysicalDelete 是否进行物理删除，true 表示物理删除，false 表示逻辑删除
     * @return 删除的记录数
     */
    int deleteByFparentid(@Param("fparentid") Long fparentid, @Param("isPhysicalDelete") boolean isPhysicalDelete);



    default Long selectMaxSeqByFparentid(Long fparentid){
        // 查询最大的序号, 如果查询结果不存在，返回 1
        ErpBomItemsDO result =  selectOne(new LambdaQueryWrapperX<ErpBomItemsDO>()
                .eq(ErpBomItemsDO::getFparentid, fparentid)
                .select(ErpBomItemsDO::getFseq)
                .orderByDesc(ErpBomItemsDO::getFseq)
                .last("limit 1"));
        return result != null ? result.getFseq() : 1L;
    }

}
